
#ifndef GamePadButtons_h
#define GamePadButtons_h

#include <System/String.h>

#include <Riccsson/Xna/Framework/Input/Buttons.h>
#include <Riccsson/Xna/Framework/Input/ButtonState.h>

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
			namespace Input
			{
				// Summary:
				//     Identifies whether buttons on an Xbox 360 Controller are pressed or released.
				//     Reference page contains links to related code samples.
				struct GamePadButtons : public Riccsson::System::object
				{
						
					PROP3GET(GamePadButtons, ButtonState, A);
					PROP3GET(GamePadButtons, ButtonState, B);
					PROP3GET(GamePadButtons, ButtonState, Back);
					PROP3GET(GamePadButtons, ButtonState, BigButton);
					PROP3GET(GamePadButtons, ButtonState, LeftShoulder);
					PROP3GET(GamePadButtons, ButtonState, LeftStick);
					PROP3GET(GamePadButtons, ButtonState, RightShoulder);
					PROP3GET(GamePadButtons, ButtonState, RightStick);
					PROP3GET(GamePadButtons, ButtonState, Start);
					PROP3GET(GamePadButtons, ButtonState, X);
					PROP3GET(GamePadButtons, ButtonState, Y);
					
					COPY_CONSTRUCTOR(GamePadButtons)
					{
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, A);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, B);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, Back);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, BigButton);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, LeftShoulder);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, LeftStick);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, RightShoulder);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, RightStick);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, Start);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, X);
						PROP3GET_INIT_COPY(GamePadButtons, ButtonState, Y);
					}

					public: GamePadButtons()
						: PROP3GET_INIT(GamePadButtons, A)
						, PROP3GET_INIT(GamePadButtons, B)
						, PROP3GET_INIT(GamePadButtons, Back)
						, PROP3GET_INIT(GamePadButtons, BigButton)
						, PROP3GET_INIT(GamePadButtons, LeftShoulder)
						, PROP3GET_INIT(GamePadButtons, LeftStick)
						, PROP3GET_INIT(GamePadButtons, RightShoulder)
						, PROP3GET_INIT(GamePadButtons, RightStick)
						, PROP3GET_INIT(GamePadButtons, Start)
						, PROP3GET_INIT(GamePadButtons, X)
						, PROP3GET_INIT(GamePadButtons, Y)
					{
					}

					//
					// Summary:
					//     Initializes a new instance of the GamePadButtons class, setting the specified
					//     buttons to pressed in.
					//
					// Parameters:
					//   buttons:
					//     Buttons to initialize as pressed. Specify a single button or combine multiple
					//     buttons using a bitwise OR operation.
					public: GamePadButtons(Buttons buttons)
						: PROP3GET_INIT(GamePadButtons, A)
						, PROP3GET_INIT(GamePadButtons, B)
						, PROP3GET_INIT(GamePadButtons, Back)
						, PROP3GET_INIT(GamePadButtons, BigButton)
						, PROP3GET_INIT(GamePadButtons, LeftShoulder)
						, PROP3GET_INIT(GamePadButtons, LeftStick)
						, PROP3GET_INIT(GamePadButtons, RightShoulder)
						, PROP3GET_INIT(GamePadButtons, RightStick)
						, PROP3GET_INIT(GamePadButtons, Start)
						, PROP3GET_INIT(GamePadButtons, X)
						, PROP3GET_INIT(GamePadButtons, Y)
					{
						throw;
					}

					// Summary:
					//     Identifies if the A button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, A)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the B button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, B)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the BACK button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, Back)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the BigButton button is pressed.
					public: PROP3_GET(ButtonState, BigButton)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the left shoulder (bumper) button on the Xbox 360 Controller
					//     is pressed.
					public: PROP3_GET(ButtonState, LeftShoulder)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the left stick button on the Xbox 360 Controller is pressed
					//     (the stick is "clicked" in).
					public: PROP3_GET(ButtonState, LeftStick)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the right shoulder (bumper) button on the Xbox 360 Controller
					//     is pressed.
					public: PROP3_GET(ButtonState, RightShoulder)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the right stick button on the Xbox 360 Controller is pressed
					//     (the stick is "clicked" in).
					public: PROP3_GET(ButtonState, RightStick)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the START button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, Start)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the X button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, X)
					{
						throw;
					}
					//
					// Summary:
					//     Identifies if the Y button on the Xbox 360 Controller is pressed.
					public: PROP3_GET(ButtonState, Y)
					{
						throw;
					}

					// Summary:
					//     Returns a value that indicates if the current instance is equal to a specified
					//     object.
					//
					// Parameters:
					//   obj:
					//     The object with which to make the comparison.
					public: override bool Equals(Riccsson::System::object* obj)
					{
						throw;
					}
					//
					// Summary:
					//     Gets the hash code for this instance.
					public: override int GetHashCode()
					{
						throw;
					}
					//
					// Summary:
					//     Retrieves a string representation of this object.
					public: override GC_PTR<Riccsson::System::string> ToString()
					{
						throw;
					}
				};
				
				// Summary:
				//     Determines whether two GamePadButtons instances are not equal.
				//
				// Parameters:
				//   left:
				//     Object on the left of the equal sign.
				//
				//   right:
				//     Object on the right of the equal sign.
				static bool operator !=(GamePadButtons left, GamePadButtons right)
				{
					throw;
				}
				//
				// Summary:
				//     Indicates if the two GamePadButton objects are equal.
				//
				// Parameters:
				//   left:
				//     The GamePadButtons instance on the left side of the equality.
				//
				//   right:
				//     The GamePadButtons instance on the right side of the equality.
				static bool operator ==(GamePadButtons left, GamePadButtons right)
				{
					throw;
				}
			}
		}
	}
}

#endif